package com.pucong.gitee.database.backup.business.database.service;

import com.pucong.gitee.database.backup.common.entity.database.dto.*;
import com.pucong.gitee.database.backup.common.entity.database.vo.DatabaseTableFiledVo;
import com.pucong.gitee.database.backup.common.entity.database.vo.DatabaseTableIndexVo;
import com.pucong.gitee.database.backup.common.entity.database.vo.DatabaseTableVo;
import com.pucong.gitee.database.backup.common.entity.database.vo.RunSqlResultPage;

import javax.websocket.Session;
import java.util.List;

public interface OperationDataTableService {

    /**
     * 获取表 list
     *
     * @param dto
     * @return
     */
    List<DatabaseTableVo> getTableList(DatabaseTableDto dto);

    /**
     * 获取表数据
     * @param sessionId
     * @param dto
     * @return
     */
    RunSqlResultPage getTableData(String sessionId, DatabaseTableDataDto dto);

    /**
     * 获取表ddl
     *
     * @param sessionId
     * @param dto
     * @return
     */
    String getTableDdl(String sessionId, DatabaseTableDdlDto dto) throws Exception;

    /**
     * 获取表dml
     *
     * @param dto
     * @return
     */
    String getTableDml(String sessionId, DatabaseTableDdlDto dto);

    String downloadTable2Excel(String sessionId, DatabaseTableDdlDto dto) throws Exception;

    String downloadTable2Csv(String sessionId, DatabaseTableDdlDto dto) throws Exception;

    /**
     * 删除表
     *
     * @param dto
     * @return
     */
    Boolean deleteTable(String sessionId, DatabaseTableDdlDto dto);

    /**
     * 删除表数据
     *
     * @param sessionId
     * @param dto
     * @return
     */
    Boolean clearTableData(String sessionId, DatabaseTableDdlDto dto);

    Boolean deleteTableData(String sessionId, DatabaseTableDdlDto dto);

    void initConnection(Session session);

    void close(Session session);

    void doMsg(String message, Session session);

    /**
     * 获取dml sql
     * @param dto
     * @return
     */
    List<String> getDataDmlSql(DatabaseTableDataDmlDto dto);

    /**
     * 获取字段信息
     *
     * @param dto
     * @return
     */
    List<DatabaseTableFiledVo> getTableFiledList(DatabaseTableDataDto dto);

    /**
     * 上移
     * @param dto
     * @return
     */
    Boolean toUp(DatabaseTableFiledDto dto);

    /**
     * 下移
     * @param dto
     * @return
     */
    Boolean toDown(DatabaseTableFiledDto dto);

    /**
     * 删除字段
     * @param dto
     * @return
     */
    Boolean deleteFiled(DatabaseTableFiledDto dto);

    /**
     * 获取数据源的表字段类型list
     * @param dataSourceId
     * @return
     */
    String[] getTableFiledTypeList(String dataSourceId);

    /**
     * 新增字段
     * @param dto
     * @return
     */
    Boolean addFiled(DatabaseTableFiledAddDto dto);

    /**
     * 修改字段
     * @param dto
     * @return
     */
    Boolean updateFiled(DatabaseTableFiledUpdateDto dto);

    /**
     * 获取表索引信息
     * @param dto
     * @return
     */
    List<DatabaseTableIndexVo> getTableIndexList(DatabaseTableIndexSelectDto dto);

    /**
     * 新增索引
     * @param dto
     * @return
     */
    Boolean addIndex(DatabaseTableIndexAddDto dto);

    /**
     * 修改索引
     * @param dto
     * @return
     */
    Boolean updateIndex(DatabaseTableIndexUpdateDto dto);

    /**
     * deleteIndex
     * @param dto
     * @return
     */
    Boolean deleteIndex(DatabaseTableIndexDelDto dto);

    /**
     * 获取索引函数
     * @param dto
     * @return
     */
    String[] getTableIndexTypeList(DatabaseTableIndexSelectDto dto);

    Boolean alterPk(DatabaseTableFiledPkDto dto);
}
